package org.qianji.goosql;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * 片段-SQL语句的最小组成单元，如表、字段、条件等都可以称为一个SQL片段。<br/>
 * 该接口主要声明了所有SQL片段都必须实现的三个方法：<br>
 * 1. {@link Fragment#getNamedParameters() getNamedParameters} 获取命名式参数。<br>
 * 2. {@link Fragment#getPlacedParameters() getPlacedParameters} 获取占位符参数。<br>
 * 3. {@link Fragment#toSql() toSql} 转换为SQL语句。<br>
 * </p>
 * 
 * @author gmz
 * 
 */
public interface Fragment extends Serializable {

	/**
	 * 获取命名式参数，即SQL语句中以命名（:parName）方式声明的参数。
	 * 
	 * @return {@link java.util.Map Map&lt;String,Object&gt;} 名称-值构成的参数Map
	 */
	public Map<String, Object> getNamedParameters();

	/**
	 * 获取占位符参数，即SQL语句中以问号（?）方式声明的参数。
	 * 
	 * @return {@link java.util.List List&lt;Object&gt;} 参数值列表
	 */
	public List<Object> getPlacedParameters();

	/**
	 * 将SQL对象转换为SQL语句
	 * 
	 * @return {@link java.lang.String String} SQL语句
	 */
	public String toSql();

}
